// 接受一个对象作为参数
// 返回值是一个Promise对象
// 根据传入的参数，选择不同的请求方式和请求地址

// 封装一个函数
const myAxios = function (config) {
  return new Promise((resolve, reject) => {
    // console.log(config);

    const { method, url, data, params } = config

    // 创建一个xhr对象
    const xhr = new XMLHttpRequest()

    // 先判断是get请求还是post请求
    if (method === 'GET') {
      // 1.处理查询字符串
      const str = setParams(params)

      // 2.调用open方法
      xhr.open('GET', params ? url + '?' + str : url)

      // 调用send方法
      xhr.send()
    } else {
      //  调用open方法
      xhr.open('POST', url)
      // 判断是什么类型
      let flag = Object.prototype.toString.call(data) === '[object Object]'
      // 设置请求头
      xhr.setRequestHeader(
        'Content-type',
        flag ? 'application/json' : 'application/x-www-form-unlendcoded'
      )

      // 调用send方法
      xhr.send(flag ? JSON.stringify(data) : data)
    }

    // 监听xhr的状态
    xhr.onreadystatechange = function () {
      // 判断xhr的状态
      if (xhr.readyState === 4) {
        if (xhr.status >= 200 && xhr.status < 300) {
          // 将请求的结果给到成功的结果
          resolve(JSON.parse(xhr.responseText))
        } else {
          reject(xhr.status)
        }
      }
    }
  })
}

function setParams(obj) {
  const arr = []

  for (let key in obj) {
    const str = key + '=' + obj[key]
    arr.push(str)
  }
  return arr.join('&')
}
